﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.ResumoFinanceiro.Communication.Translator.ProcessEntityToModel
{
    public class CalculoFinanceiro
    {
        #region Construtor

        /// <summary>
        /// Construtor padrão
        /// </summary>
        public CalculoFinanceiro()
        {
        }

        #endregion

        #region Métodos

        public Model.CalculoFinanceiroResultado ToCalculoFinanceiroResultado(Process.Bovespa.CalculoFinanceiro.ProcessEntity.CalculoFinanceiroResultado from)
        {
            if (from == null) return null;

            return new Sinacor.UI.Bovespa.ResumoFinanceiro.Model.CalculoFinanceiroResultado
            {
                Erro = from.Erro,
                FinanceiroPendente = this.ToFinanceiroPendente(from.FinanceiroPendente),
                Sucesso = from.Sucesso
            };
        }

        public ModelCollection<Model.CalculoFinanceiroResultado> ToCalculoFinanceiroResultado(List<Process.Bovespa.CalculoFinanceiro.ProcessEntity.CalculoFinanceiroResultado> from)
        {
            ModelCollection<Model.CalculoFinanceiroResultado> retorno = new ModelCollection<Model.CalculoFinanceiroResultado>();
            
            if (from == null) return null;

            from.ForEach(delegate(Process.Bovespa.CalculoFinanceiro.ProcessEntity.CalculoFinanceiroResultado item)
            {
                retorno.Add(this.ToCalculoFinanceiroResultado(item));
            });

            return retorno;
        }

        public Model.FinanceiroPendente ToFinanceiroPendente(Process.Bovespa.CalculoFinanceiro.ProcessEntity.FinanceiroPendente from)
        {
            Sinacor.UI.Bovespa.ResumoFinanceiro.Model.FinanceiroPendente retorno = null;

            if (from != null)
            {
                retorno = new Sinacor.UI.Bovespa.ResumoFinanceiro.Model.FinanceiroPendente();

                retorno.ApelidoBroker = from.ApelidoBroker;
                retorno.ApelidoCliente = from.ApelidoCliente;
                retorno.BolsaFaturamento = from.BolsaFaturamento;
                retorno.CodigoBroker = from.CodigoBroker;
                retorno.CodigoCliente = from.CodigoCliente;
                retorno.DataLiquidacao = from.DataLiquidacao;
                retorno.DataPregao = from.DataPregao;
                retorno.DataUltimaAlocacao = from.DataUltimaAlocacao;
                retorno.DataUltimaAtualizacao = from.DataUltimaAtualizacao;
                retorno.LiquidacaoNota = from.LiquidacaoNota;
                retorno.Identificador = from.Identificador;

                switch (from.IndicadorBroker)
                {
                    case Sinacor.Process.Bovespa.CalculoFinanceiro.ProcessEntity.Enum.TipoCliente.Broker:
                        retorno.IndicadorBroker = Model.Enum.TipoCliente.Broker;
                        break;
                    case Sinacor.Process.Bovespa.CalculoFinanceiro.ProcessEntity.Enum.TipoCliente.Cliente:
                        retorno.IndicadorBroker = Model.Enum.TipoCliente.Cliente;
                        break;
                    case Sinacor.Process.Bovespa.CalculoFinanceiro.ProcessEntity.Enum.TipoCliente.Financeiro:
                        retorno.IndicadorBroker = Model.Enum.TipoCliente.Financeiro;
                        break;
                }
            }

            return retorno;
        }

        #endregion
    }
}
